🛡️ هدف فصل:
در این فصل با امنیت در لینوکس آشنا میشوید. از بررسی ورود کاربران و اسکن سیستم گرفته تا مدیریت رمز عبور، اتصال امن با SSH و رمزنگاری فایلها با GPG. این مبانی برای هر مدیر سیستمی که میخواهد از سیستم خود در برابر تهدیدات محافظت کند، حیاتی است.
▍ ۱. بررسی ورود به سیستم (who, w, last)
یکی از وظایف مهم مدیر سیستم، نظارت بر ورود و خروج کاربران است. لینوکس تمام اطلاعات ورود و خروج را در فایلهای لاگ ذخیره میکند و سه فرمان اصلی برای نمایش این اطلاعات وجود دارد:
🔵 who
- کاربران فعال فعلی را نشان میدهد.
- منبع:
/var/run/utmp
- گزینهها:
-b (زمان بوت)، -r (runlevel)، -u (زمان بیکاری)
🟢 w
- کاربران فعال به همراه بار سیستم و فرمان در حال اجرا.
- منبع:
/var/run/utmp
- ستونها: USER, TTY, FROM, LOGIN@, IDLE, JCPU, PCPU, WHAT
🔴 last
- تاریخچهٔ کامل ورود و خروج کاربران.
- منبع:
/var/log/wtmp
- گزینهها:
-n N (تعداد خطوط)، -x (اطلاعات کامل)، last reboot (زمان ریبوت)
┌──(ya3in㉿kali)-[~]
└─$ who -u
ya3in seat0 2026-09-07 09:08 . 12345
root pts/0 2026-09-07 10:15 00:05 12346
└─$ w
10:35:18 up 1:27, 3 users, load average: 0.08, 0.03, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ya3in seat0 :0 09:08 1:27m 2.35s 0.12s gnome-shell
root pts/0 192.168.1.100 10:15 5.00s 0.45s 0.05s w
└─$ last -n 3
ya3in seat0 :0 Sat Sep 7 09:08 still logged in
root pts/0 192.168.1.100 Sat Sep 7 10:15 - 10:35 (00:20)
ali pts/1 192.168.1.101 Sat Sep 7 10:30 - 11:00 (00:30)
w ترکیبی از who، uptime و ps است.
▍ ۲. اسکن کردن سیستم (nmap, ss, netstat, lsof, fuser)
اصل طلایی امنیت: «قبل از هکر، خودت سیستم را اسکن کن». باید پورتهای باز، سرویسهای فعال و برنامههای پشت هر پورت را شناسایی و سرویسهای غیرضروری را غیرفعال کنید.
• nmap (اسکنر پورت حرفهای)
nmap -sT 127.0.0.1 # اسکن TCP لوکالهوست
nmap -sU 127.0.0.1 # اسکن UDP لوکالهوست
nmap -6 ::1 # اسکن IPv6
nmap -sT 192.168.100.11 # اسکن از نمای شبکه
• ss و netstat (پورتهای باز)
ss -ltu # نمایش پورتهای TCP/UDP در حال گوشدادن
netstat --tcp --listening
• lsof و fuser (برنامههای پشت پورت)
lsof -iTCP -sTCP:LISTEN
lsof -i tcp:22
fuser -vn tcp 22
• غیرفعال کردن سرویسهای غیرضروری
sudo systemctl stop SERVICE
sudo systemctl disable SERVICE
sudo systemctl mask SERVICE # قفل کامل
همیشه TCP و UDP و IPv4 و IPv6 را اسکن کنید.
▍ ۳. امنسازی دسترسی و رمز عبور
• محل ذخیرهٔ رمزها
/etc/passwd → اطلاعات عمومی کاربران (قابل خواندن توسط همه).
/etc/shadow → رمزهای هششده (فقط قابل خواندن توسط root).
• تغییر رمز با passwd و chpasswd
sudo passwd ali
echo "ali:123456" | sudo chpasswd
• قفل و باز کردن کاربر
sudo passwd -l ali # قفل
sudo passwd -u ali # باز کردن قفل
sudo usermod -L ali # قفل با usermod
sudo usermod -U ali # باز کردن با usermod
• دسترسی به root: su در مقابل sudo
🔵 su
- تغییر به کاربر root (نیاز به رمز root).
su - (بارگیری محیط کامل root).
- خطر: اشتراک رمز root، همه دستورات با دسترسی کامل اجرا میشوند.
🟢 sudo
- اجرای یک دستور خاص با دسترسی root (نیاز به رمز خودتان).
- دستورات در
/var/log/auth.log لاگ میشوند.
- تنظیم در
/etc/sudoers با visudo.
- افزودن کاربر به گروه
sudo: sudo usermod -aG sudo ali
برای ویرایش /etc/sudoers حتماً از visudo استفاده کنید.
▍ ۴. استفاده از SSH (Secure Shell)
SSH یک پروتکل امن برای ارتباط با سیستمهای راه دور است که جایگزین Telnet و FTP ناامن شده است. در SSH از جفتکلید عمومی/خصوصی برای احراز هویت استفاده میشود.
• تولید کلید با ssh-keygen
ssh-keygen -t rsa -b 4096 -C "my_key@server"
# کلید خصوصی: ~/.ssh/id_rsa
# کلید عمومی: ~/.ssh/id_rsa.pub
• انتقال کلید عمومی به سرور
ssh-copy-id user@192.168.1.100
# یا بهصورت دستی:
cat ~/.ssh/id_rsa.pub | ssh user@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
• اتصال و انتقال فایل
ssh user@192.168.1.100
scp file.txt user@192.168.1.100:/tmp/
sftp user@192.168.1.100
• محدودیتهای امنیتی SSH در /etc/ssh/sshd_config
# غیرفعال کردن ورود root
PermitRootLogin no
# تغییر پورت
Port 2222
# غیرفعال کردن ورود با رمز عبور
PasswordAuthentication no
# غیرفعال کردن X11 Forwarding
X11Forwarding no
# غیرفعال کردن Challenge-Response
ChallengeResponseAuthentication no
# حداکثر تلاش برای ورود
MaxAuthTries 3
قبل از غیرفعال کردن PasswordAuthentication، حتماً از تنظیم بودن کلید مطمئن شوید.
▍ ۵. رمزنگاری فایل با GPG
GPG (GNU Privacy Guard) یک پیادهسازی از استاندارد OpenPGP است که برای رمزنگاری فایلها و امضای دیجیتال استفاده میشود. از رمزنگاری نامتقارن (Public/Private Key) استفاده میکند.
• تولید کلید
gpg --full-generate-key
# انتخاب نوع: RSA و RSA (پیشفرض)
# اندازه: 4096 بیت (پیشنهادی)
# انقضا: 0 (بدون انقضا)
# نام، ایمیل، کامنت و Passphrase
• صادرات و واردات کلید
gpg --armor --export ya3in@example.com > public.key
gpg --import public.key
gpg --list-keys
gpg --list-secret-keys
• رمزنگاری و رمزگشایی
echo "LPIC1 GPG Public Key Test" > secret.txt
gpg -e -r userb@example.com secret.txt
# خروجی: secret.txt.gpg
gpg -d secret.txt.gpg
# نمایش محتوا (نیاز به Passphrase)
gpg -d secret.txt.gpg > secret.txt
• نکات مهم
- کلید خصوصی را هرگز با کسی به اشتراک نگذارید.
- برای کلید خصوصی حتماً Passphrase قوی انتخاب کنید.
- کلید عمومی را میتوانید با خیال راحت منتشر کنید.
- برای وارد کردن Passphrase در محیط متنی،
pinentry-curses را نصب کنید.
گزینهٔ --armor کلید را به فرمت متنی (ASCII) تبدیل میکند که برای ایمیل مناسب است.
📌 نکات طلایی برای امتحان (جمعبندی نهایی)
- بررسی ورود:
who (کاربران فعال)، w (بار سیستم + فرمانها)، last (تاریخچه ورود).
- اسکن سیستم:
nmap (TCP، UDP، IPv6)، ss -ltu (پورتهای باز)، lsof (برنامههای پشت پورت)، fuser (PID پورت).
- رمزهای عبور: در
/etc/shadow ذخیره میشوند (فقط root قابل خواندن).
- قفل کاربر:
passwd -l یا usermod -L.
- دسترسی root:
su (نیاز به رمز root) در مقابل sudo (نیاز به رمز خودتان، قابل لاگگیری).
- SSH: با
ssh-keygen کلید بسازید، با ssh-copy-id انتقال دهید، محدودیتها را در /etc/ssh/sshd_config اعمال کنید.
- GPG: با
--full-generate-key کلید بسازید، با --armor --export صادر کنید، با -e -r رمزنگاری و با -d رمزگشایی کنید.
- اصل طلایی: «قبل از هکر، خودت سیستم را اسکن کن».
✅ تمرین عملی پیشنهادی
- با
who، w و last وضعیت ورود کاربران را بررسی کنید.
- سیستم خود را با
nmap (TCP، UDP، IPv6) اسکن کنید و پورتهای باز را شناسایی کنید.
- یک کاربر جدید بسازید، با
passwd رمز تنظیم کنید و با usermod -L قفل کنید.
- یک جفتکلید SSH با
ssh-keygen بسازید و با ssh-copy-id به یک سرور آزمایشی انتقال دهید.
- یک فایل متنی با
gpg برای خودتان رمزنگاری و سپس رمزگشایی کنید.
- تنظیمات امنیتی SSH را در
/etc/ssh/sshd_config اعمال و سرویس را ریاستارت کنید.